package com.zw.pdm.module.designtask.service;

import com.zw.pdm.entity.basic.Dept;
import com.zw.pdm.entity.designtask.DsnGant;
import com.zw.pdm.module.designtask.mapper.DsnGantMapper;
import com.zw.pdm.module.designtask.mapper.DsnProcessMapper;
import com.zw.pdm.module.designtask.model.DsnGantBillModel;
import com.zw.pdm.module.designtask.model.DsnGantWorkModel;
import com.zw.pdm.module.designtask.model.DsnProcessModel;
import com.zw.pdm.module.designtask.repository.DsnGantRepository;
import com.zw.pdm.module.report.mapper.SheetMapper;
import com.zw.pdm.module.report.model.Project;
import com.zw.pdm.module.system.mapper.DeptMapper;
import com.zw.pdm.module.system.service.LogService;
import com.zw.pdm.util.ShiroUtils;
import lombok.var;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

import static com.zw.pdm.util.BeanUtil.copy;

/**
 * @Description:
 * @Author: China.wsg
 * @Date: 2020/10/23 09:00
 */
@Service
@SuppressWarnings("all")
public class DsnGantService {

    @Autowired
    private LogService logService;
    @Autowired
    private DsnProcessMapper dsnProcessMapper;
    @Autowired
    private DsnGantMapper dsnGantMapper;
    @Autowired
    private DsnGantRepository dsnGantRepository;
    @Autowired
    private SheetMapper sheetMapper;
    @Autowired
    private DeptMapper deptMapper;

    /**
     * 根据项目编号和登入人员获取项目计划
     *
     * @param proCode
     * @param createCode
     * @return
     */
    public List<DsnGant> findGantListByProCodeAndCreateCode(String proCode, String createCode) {

        return dsnGantMapper.findGantListByProCodeAndCreateCode(proCode, createCode, ShiroUtils.getUser().getDeptId());
    }

    /**
     * 保存项目计划甘特图
     *
     * @param dsnGantBillModel
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public boolean save(DsnGantBillModel dsnGantBillModel) {

        // 取得项目信息
        Project project = sheetMapper.findProjectByCode(dsnGantBillModel.getFormData().getProCode()).get(0);
        if (project == null || project.getId() == null) {
            return false;
        }

        // 新增
        List<DsnGant> dsnGantAdds = dsnGantBillModel.getInsertData();
        if (dsnGantAdds != null) {
            DsnGant dsnGantAdd;
            for (var i = 0; i < dsnGantAdds.size(); i++) {
                dsnGantAdd = new DsnGant();
                copy(dsnGantAdds.get(i), dsnGantAdd);
                dsnGantAdd.setProId(project.getId());
                dsnGantAdd.setProCode(project.getCode());
                dsnGantAdd.setProName(project.getName());
                dsnGantAdd.setTaskerName(dsnGantAdd.getTaskerName().replace("\n", "").replace(" ", ""));
                dsnGantAdd.setDeptId(dsnGantBillModel.getFormData().getDeptId());
                dsnGantAdd.setDeptName(dsnGantBillModel.getFormData().getDeptName());
                dsnGantAdd.setTaskType("设计");
                dsnGantAdd.setCreateCode(ShiroUtils.getUser().getAccount());
                dsnGantAdd.setCreateName(ShiroUtils.getUser().getName());
                dsnGantRepository.save(dsnGantAdd);
            }
        }

        // 修改
        List<DsnGant> dsnGantUdps = dsnGantBillModel.getUpdateData();
        if (dsnGantUdps != null) {
            DsnGant dsnGantUdp;
            for (var i = 0; i < dsnGantUdps.size(); i++) {
                dsnGantUdp = new DsnGant();
                copy(dsnGantUdps.get(i), dsnGantUdp);
                // 判断行内容是否都为空，都为空的数据执行删除操作
                if(dsnGantUdp.getTaskerName().equals("") && dsnGantUdp.getContent().equals("") && dsnGantUdp.getStartTime() == null
                && dsnGantUdp.getEndTime() == null && dsnGantUdp.getDiachronic() == null && dsnGantUdp.getRemark().equals("")){
                    // 执行删除操作
                    dsnGantMapper.delDsnGant(dsnGantUdp.getId());
                    continue;
                }
                dsnGantUdp.setProId(project.getId());
                dsnGantUdp.setProCode(project.getCode());
                dsnGantUdp.setProName(project.getName());
                dsnGantUdp.setTaskerName(dsnGantUdp.getTaskerName().replace("\n", "").replace(" ", ""));
                dsnGantUdp.setDeptId(dsnGantBillModel.getFormData().getDeptId());
                dsnGantUdp.setDeptName(dsnGantBillModel.getFormData().getDeptName());
                dsnGantUdp.setTaskType("设计");
                dsnGantUdp.setCreateCode(ShiroUtils.getUser().getAccount());
                dsnGantUdp.setCreateName(ShiroUtils.getUser().getName());
                dsnGantRepository.save(dsnGantUdp);
            }
        }

        // 删除
        List<Integer> dsnGantDels = dsnGantBillModel.getDelData();
        if (dsnGantDels != null) {
            for (var i = 0; i < dsnGantDels.size(); i++) {
                dsnGantMapper.delDsnGant(dsnGantDels.get(i));
            }
        }

        logService.saveLog("保存项目计划甘特图", "项目编号：" + project.getCode() + "<br>项目名称：" + project.getName());
        return true;
    }

    /**
     * 根据条件查询分配任务
     *
     * @param dsnGant
     * @return
     */
    public List<DsnGant> findDsnGantByQuery(DsnGant dsnGant) {

        // 加载时无项目编号不显示列表数据
        if ((dsnGant.getProCode() == null || dsnGant.getProCode() == "")
                && (dsnGant.getProCodeQuery() == null || dsnGant.getProCodeQuery() == "")) {
            dsnGant.setProCode("无编号");
        }
        return dsnGantMapper.findDsnGantByQuery(dsnGant);
    }

    /**
     * 根据条件查询员工业绩
     *
     * @param dsnGant
     * @return
     */
    public List<DsnGantWorkModel> findTaskerWorkByQuery(DsnGant dsnGant) {
        return dsnGantMapper.findTaskerWorkByQuery(dsnGant);
    }

}
